//////////////////////////////////////////////////////////////
//
//  Description	: PDF2HTML/BMP software
//  Author	: verypdf.com Inc
//  Version	: Ver1.2
//  Platform	: Windows95/98/Me/NT/2000/XP
//  Environment	: Visual C++ 6.0
//  Date	: 2002/04/03
//
//  Copyright(C) 2000--2003 verypdf.com Inc
//      
//  Contact infomation:
//        http://www.verypdf.com/
//        support@verypdf.com
//
//  This program is shareware; you can redistribute and/or 
//  modify it under the terms of the GNU General Public License.
//  See the GNU General Public License for more details.
//
//               Portion base on Xpdf code
//         Copyright 1996-2003 Glyph && Cog, LLC
//////////////////////////////////////////////////////////////

#ifdef __GNUC__
#pragma implementation
#endif

#include "aconf.h"
#include <stdlib.h>
#include <string.h>
#include "gmem.h"
#include "FontEncodingTables.h"
#include "BuiltinFont.h"

//------------------------------------------------------------------------

BuiltinFontWidths::BuiltinFontWidths(BuiltinFontWidth *widths, int sizeA) 
{
	int i, h;
	
	size = sizeA;
	tab = (BuiltinFontWidth **)gmalloc(size * sizeof(BuiltinFontWidth *));
	for (i = 0; i < size; ++i) 
	{
		tab[i] = NULL;
	}
	for (i = 0; i < sizeA; ++i) 
	{
		h = hash(widths[i].name);
		widths[i].next = tab[h];
		tab[h] = &widths[i];
	}
}

BuiltinFontWidths::~BuiltinFontWidths() 
{
	gfree(tab);
}

GBool BuiltinFontWidths::getWidth(char *name, Gushort *width) 
{
	int h;
	BuiltinFontWidth *p;
	
	h = hash(name);
	for (p = tab[h]; p; p = p->next) 
	{
		if (!strcmp(p->name, name)) 
		{
			*width = p->width;
			return gTrue;
		}
	}
	return gFalse;
}

int BuiltinFontWidths::hash(char *name) 
{
	char *p;
	unsigned int h;
	
	h = 0;
	for (p = name; *p; ++p) 
	{
		h = 17 * h + (int)(*p & 0xff);
	}
	return (int)(h % size);
}
